home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
msoftapp.zip
/
CIRCLDOC.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1993-06-01
|
4KB
|
190 lines
// circldoc.cpp : implementation of the CCircleDoc class
//
#include "stdafx.h"
#include "circle.h"
#include "circldoc.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCircleDoc
IMPLEMENT_DYNCREATE(CCircleDoc, CDocument)
BEGIN_MESSAGE_MAP(CCircleDoc, CDocument)
//{{AFX_MSG_MAP(CCircleDoc)
ON_COMMAND(ID_EDIT_RED, OnEditRed)
ON_COMMAND(ID_EDIT_GREEN, OnEditGreen)
ON_COMMAND(ID_EDIT_BLUE, OnEditBlue)
ON_UPDATE_COMMAND_UI(ID_EDIT_RED, OnUpdateEditRed)
ON_UPDATE_COMMAND_UI(ID_EDIT_GREEN, OnUpdateEditGreen)
ON_UPDATE_COMMAND_UI(ID_EDIT_BLUE, OnUpdateEditBlue)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCircleDoc construction/destruction
CCircleDoc::CCircleDoc()
{
// TODO: add one-time construction code here
}
CCircleDoc::~CCircleDoc()
{
}
BOOL CCircleDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CCircleDoc serialization
void CCircleDoc::Serialize(CArchive& ar)
{
m_circle.Serialize(ar);
}
/////////////////////////////////////////////////////////////////////////////
// CCircleDoc diagnostics
#ifdef _DEBUG
void CCircleDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CCircleDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CCircleDoc commands
CCircle CCircleDoc::GetCircle (void) const
{
return m_circle ;
}
/////////////////////////////////////////////////////////////////////////////
// CCircle stuff
IMPLEMENT_SERIAL (CCircle, CObject, 1)
CCircle::CCircle (void)
{
m_rect.left = m_rect.top = 0;
m_rect.right = m_rect.bottom = 100;
m_colorref = RGB(255,0,0);
}
CCircle::CCircle (const CCircle &c)
{
m_rect = c.m_rect;
m_colorref = c.m_colorref;
}
void CCircle::Draw(CDC *pDC)
{
pDC->SaveDC();
CBrush brush (m_colorref);
pDC->SelectObject (&brush);
pDC->Ellipse (&m_rect);
pDC->RestoreDC(-1);
}
void CCircle::TextOut(CDC *pDC)
{
CString strColor("blue"),
strText ("The circle's color is ");
if (m_colorref == RGB(255,0,0))
strColor = "red";
else if (m_colorref == RGB(0,255,0))
strColor = "green";
strText += strColor;
pDC->TextOut (0,0,strText) ;
}
COLORREF CCircle::SetColor(COLORREF rgbNewColor)
{
COLORREF rgbOldColor = m_colorref;
m_colorref = rgbNewColor ;
return rgbOldColor ;
}
COLORREF CCircle::GetColor(void)
{
return m_colorref;
}
void CCircle::Serialize(CArchive& ar)
{
CObject::Serialize(ar);
if (ar.IsStoring())
{
ar << DWORD(m_colorref) << m_rect;
}
else
{
ar >> (COLORREF)m_colorref;
ar >> m_rect;
}
}
void CCircleDoc::OnEditRed()
{
m_circle.SetColor( RGB(255,0,0) );
SetModifiedFlag();
UpdateAllViews(NULL);
}
void CCircleDoc::OnEditGreen()
{
m_circle.SetColor( RGB(0,255,0) );
SetModifiedFlag();
UpdateAllViews(NULL);
}
void CCircleDoc::OnEditBlue()
{
m_circle.SetColor( RGB(0,0,255) );
SetModifiedFlag();
UpdateAllViews(NULL);
}
void CCircleDoc::OnUpdateEditRed(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck (m_circle.GetColor() == RGB(255,0,0));
}
void CCircleDoc::OnUpdateEditGreen(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck (m_circle.GetColor() == RGB(0,255,0));
}
void CCircleDoc::OnUpdateEditBlue(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck (m_circle.GetColor() == RGB(0,0,255));
}